package com.haiyi.activiti.engine.framework.activiti.manager;

import org.activiti.engine.task.Task;

import java.util.List;
import java.util.Map;

/**
 * <p> </p>
 *
 * <pre> Created: 2018/12/5 17:21 </pre>
 *
 * @author hlu
 * @version 1.0
 * @since JDK 1.7
 */
public interface TaskManager {

    /**
     * 获取当前流程参数
     * @param processInstanceId
     * @return
     */
    Task getProcessCurrentTask(String processInstanceId);

    /**
     * 读取直接分配给当前人或者已经签收的任务
     * @param userId
     * @return
     */
    List<Task> getAssignTasks(String userId);

    /**
     * 查询待签收的任务
     * @return
     */
    List<Task> getCandidateTasks(String userId);

    /**
     * 查询代签收、直接分配或已经签收的任务
     * @return
     */
    List<Task> getCandidateOrAssigned(String userId);

    /**
     * 签收任务
     */
    void claimTask(String taskId,String userId);

    /**
     * 反签收任务
     * @param taskId
     */
    void unClaimTask(String taskId);

    /**
     * 指定任务委派给指定人
     * @param taskId
     * @param delegateUserId
     */
    void delegateTask(String taskId,String delegateUserId);

    /**
     * 查询被指派的任务
     * @param userId
     * @return
     */
    List<Task> getDelegateTasks(String userId);

    /**
     * 完成被指派的任务
     */
    void compleDelegateTask(String taskId, Map<String,Object> map);

    /**
     * 查询委派人已完成的任务
     * @param userId
     * @return
     */
    List<Task> getResolveDelegateTasks(String userId);

    /**
     * 提交任务
     * @param taskId
     * @param variables
     */
    void completeTask(String taskId,Map<String,Object> variables);

    /**
     * 获得指定任务已有参数
     * @param taskId
     * @return
     */
    Map<String,Object> getParams(String taskId);
}
